package com.jichaoyun.service;

import com.jichaoyun.common.model.PagedResult;
import com.jichaoyun.model.entity.Realdata;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jichaoyun.model.vo.SomeStationFlowTotal;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
* @author zhen
* @description 针对表【realData】的数据库操作Service
* @createDate 2023-11-16 19:42:41
*/
public interface IRealdataService extends IService<Realdata> {

    Realdata getStationSingleInfoById(Integer station_no);

//    List<> getSingleStationData(Integer stationNo,String start,String end);

    /**
     * 获取某站点最近一条实时数据信息
     * @param station_no
     * @return
     */
    List<Map<String,Object>> getRealDataById(Integer station_no);

    /**
     * 查询近30分钟数据
     * @param stationName
     * @return
     * @throws ParseException
     */
    Map<String,List<Float>> getHalfHourRealData(String stationName);


    List<Realdata> getTop5Flow();

    List<Realdata> getTop5Temp();

    List<Realdata> getTop5Pres();

    PagedResult getMultiRealInfovo(Integer pageNo, Integer pageSize);

    /**
     * 查看各项报警占比
     * @return
     */
    Map<String,Long> eachAlarmProportion();

    /**
     * 查询某时间区间低计量参数的显示结果
     * @param pageNo
     * @param start
     * @param end
     * @return
     */
    PagedResult getPeriodInfoPage(Integer pageNo, LocalDateTime start, LocalDateTime end);

    /**
     * 管损报表查询
     * @param pageNo
     * @param start
     * @param end
     * @param StationNo
     * @return
     */
    PagedResult getLineLossForm(Integer pageNo, LocalDateTime start, LocalDateTime end, Integer StationNo);

    /**
     * 管损自定义查询
     * @param pageNo
     * @param start
     * @param end
     * @param StationNo
     * @return
     */
    PagedResult getLineLossForm1(Integer pageNo, LocalDateTime start, LocalDateTime end, Integer StationNo);

    Map<String, Object> getTenMinutesLineLossForm(Integer stationNo);

    /**
     * 低计量参数设置导出到excel
     * @param start
     * @param end
     * @param response
     * @throws IOException
     */
    void getPeriodInfo(LocalDateTime start, LocalDateTime end, HttpServletResponse response) throws IOException;

    /**
     * 管损报表查询-查询右边的图
     * 查找某时间区间内的数据
     * @param stationNo
     * @return
     */
    Map<String, Object> getPeriodLineLossForm(Integer stationNo, LocalDateTime start, LocalDateTime end);

    Map<String, Object> getAppPeriodLineLossForm(Integer stationNo, LocalDateTime start, LocalDateTime end);


    /**
     * 查询任意区间的蒸汽的压力温度频率流量的数据
     * @param stationNo
     * @return
     */
    Map<String, Object> getAnyPeriodRealData(Integer stationNo,LocalDateTime start,LocalDateTime end);

    /**
     * 多用户自定义用量报表
     * @param pageNo
     * @param start
     * @param end
     * @return
     */
    PagedResult getTablePeriod(Integer pageNo,LocalDateTime start,LocalDateTime end);

    PagedResult getThreeTablePeriodDetail(Integer pageNo,Integer pageSize,String type, LocalDateTime start, LocalDateTime end);

    /**
     * 多用户自定义用导出excel
     * @param s
     * @param e
     * @param response
     * @throws IOException
     */
    void getTablePeriodExcel(LocalDateTime s, LocalDateTime e,HttpServletResponse response) throws IOException;


    /**
     * 单用户自定义用量报表
     * @param pageNo
     * @param start
     * @param end
     * @return
     */
    PagedResult getTablePeriod(Integer stationNo, Integer pageNo,LocalDateTime start,LocalDateTime end);


    /**
     * 单用户自定义用导出excel
     * @param no
     * @param s
     * @param e
     * @param response
     * @throws IOException
     */
    void getTablePeriodExcel(Integer no,LocalDateTime s, LocalDateTime e,HttpServletResponse response) throws IOException;

    List<SomeStationFlowTotal> getThreeTablePeriod(LocalDateTime start, LocalDateTime end);

}
